package site.shihuan.helpdesk.auth.dao;

import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import site.shihuan.helpdesk.auth.model.bo.UpdateUserBO;
import site.shihuan.helpdesk.auth.model.po.AuthUserPO;
import site.shihuan.helpdesk.auth.model.vo.UserVO;

import java.util.List;

/**
 * 用户表(AuthUser)表数据库访问层
 *
 * @author 周世焕
 * @since 2021-01-24 16:24:34
 */
@Repository
public interface AuthUserDao {

    /**
     * 通过ID查询单条数据
     *
     * @param userId 主键
     * @return 实例对象
     */
    AuthUserPO selectByPrimaryKey(Integer userId);

    /**
     * 通过用户名、密码查询单个用户
     * @param username
     * @param password
     * @return
     */
    UserVO selectByUnameAndPwd(String username, String password);

    /**
     * 根据id查询
     * @param uid
     * @return
     */
    UserVO selectByUid(String uid);

    /**
     * 查询用户是否存在
     * @param username
     * @return
     */
    int countByUname(String username);

    /**
     * 查询邮箱是否已注册
     * @param email
     * @return
     */
    int countByEmail(String email);

    /**
     * 新增数据
     *
     * @param authUser 实例对象
     * @return 影响行数
     */
    int insert(AuthUserPO authUser);

    /**
     * 新增数据（可选字段）
     *
     * @param authUser 实例对象
     * @return 影响行数
     */
    int insertSelective(AuthUserPO authUser);

    /**
     * 修改数据
     *
     * @param authUser 实例对象
     * @return 影响行数
     */
    int updateByPrimaryKey(AuthUserPO authUser);

    /**
     * 修改数据(可选字段)
     *
     * @param authUser 实例对象
     * @return 影响行数
     */
    int updateByPrimaryKeySelective(AuthUserPO authUser);

    /**
     * 通过主键删除数据
     *
     * @param userId 主键
     * @return 影响行数
     */
    int deleteByPrimaryKey(Integer userId);

    /**
     * 根据tenant和dept和name查询
     * @param tenantId
     * @param deptId
     * @param userName
     * @return
     */
    List<UserVO> selectByTenant(String tenantId, String deptId, String userName);

    /**
     * 删除租户成员
     * @param tenantId
     * @param userIds
     * @return
     */
    int deletePeopleFromTenant(String tenantId, String[] userIds);

    /**
     * 更新租户成员信息
     * @param userBO
     * @return
     */
    int updatePeopleByTenant(UpdateUserBO userBO);

    /**
     * 批量更新tenantId
     * @param tenantId
     * @param userIds
     * @return
     */
    int updateTenantIdBatch(String tenantId, String[] userIds);
}
